/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package negocio;


import com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException;
import datos.DbConnection;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.logging.Level;
/**
 *
 * @author Marcelo
 */
public class PerfilInscrito implements Serializable {
    int oid;
    String cedula;
    String observaciones;
    boolean pagado;
    int tipo;
    String nombres;
    String apellidos;
    String telefono;
    String codigo;
    String email;

    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public String getCedula() {
        return cedula;
    }

    public void setCedula(String cedula) {
        this.cedula = cedula;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getNombres() {
        return nombres;
    }

    public void setNombres(String nombres) {
        this.nombres = nombres;
    }

    public String getObservaciones() {
        return observaciones;
    }

    public void setObservaciones(String observaciones) {
        this.observaciones = observaciones;
    }

    public int getOid() {
        return oid;
    }

    public void setOid(int oid) {
        this.oid = oid;
    }

    public boolean getPagado() {
        return pagado;
    }

    public void setPagado(boolean pagado) {
        this.pagado = pagado;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public int getTipo() {
        return tipo;
    }

    public void setTipo(int tipo) {
        this.tipo = tipo;
    }
    
    public PerfilInscrito()
    {
        
    }

    public PerfilInscrito(int oid, String cedula, String observaciones, boolean pagado, int tipo, String nombres, String apellidos, String telefono, String codigo, String email) {
        this.oid = oid;
        this.cedula = cedula;
        this.observaciones = observaciones;
        this.pagado = pagado;
        this.tipo = tipo;
        this.nombres = nombres;
        this.apellidos = apellidos;
        this.telefono = telefono;
        this.codigo = codigo;
        this.email = email;
    }
    

    //;para agregar un nuevo contacto
    static public void agregarNuevo(PerfilInscrito persona) throws AlreadyExistsException
    {
        DbConnection db = DataBase.getNewConnection();
        try
        {
            db.insertion(persona);
        } catch(MySQLIntegrityConstraintViolationException e) {
            throw new AlreadyExistsException();
        }
        db.closeConnection();
    }
    
    //modificacion de los datos de un contacto
    static public void modificar(PerfilInscrito persona)
    {
        DbConnection db = DataBase.getNewConnection();
        db.update("oid", persona);//mandamos como parametro el nombre del atributo que sera usada como clave primaria
        db.closeConnection();
    }
    
    //eliminar contactos por sus cedulas, puede ser un vector para eliminar varios contactos a la vez
    static public void eliminaPorCI(String[] cedulas)
    {
        DbConnection db = DataBase.getNewConnection();
        PerfilInscrito persona = new PerfilInscrito();
        for (int c=0;c<cedulas.length;c++)
        {
            persona.setCedula(cedulas[c]);
            db.removing("cedula", persona);
        }
        db.closeConnection();
    }
    
    //para eliminar un contacto por su cedula
    static public void elimina(PerfilInscrito persona)
    {
        DbConnection db = DataBase.getNewConnection();
        db.removing("cedula", persona);
        db.closeConnection();
    }
        
    static public PerfilInscrito encontrarPorCI(String cedula)
    {
        PerfilInscrito persona = new PerfilInscrito();
        persona.setCedula(cedula);
        
        LinkedList<PerfilInscrito> personas = encontrar("cedula", persona);
        
        if (personas.size() == 0)
            return null;
        else
            return personas.getFirst();
    }
    
    static public PerfilInscrito encontrarPorCodigo(String codigo)
    {
        codigo = codigo.replace("\\", "\\\\");
        
        codigo = codigo.replace("'", "\\'");
        
        PerfilInscrito persona = new PerfilInscrito();
        persona.setCodigo(codigo);
        
        LinkedList<PerfilInscrito> personas = encontrar("codigo", persona);
        
        if (personas.size() == 0)
            return null;
        else
            return personas.getFirst();        
    }
    
    public void copiarDe(PerfilInscrito persona)
    {
        this.oid = persona.oid;
        this.cedula = persona.cedula;
        this.observaciones = persona.observaciones;
        this.nombres = persona.nombres;
        this.pagado = persona.pagado;
        this.tipo = persona.tipo;
        this.nombres = persona.nombres;
        this.apellidos = persona.apellidos;
        this.telefono = persona.telefono;
        this.codigo = persona.codigo;
        this.email = persona.email;
    }
    
    
    //devuelve una lista ligada con todos los resultados
    static public LinkedList<PerfilInscrito> encontrar(String campo, PerfilInscrito persona)
    {
        DbConnection db = DataBase.getNewConnection();
        
        ResultSet r = db.search(campo, persona);//realizamos la consulta
        LinkedList<PerfilInscrito> personas = new LinkedList<PerfilInscrito>();
        if (r!=null)//si existen resultados
        {
            try {
                while( r.next() )//para recorrer cada resultado
                {
                    //creamos una persona con los datos obtenidos y la agregamos a la lista ligada
                    
                    PerfilInscrito currPersona = new PerfilInscrito();
                    //currPersona.copiarDe(r);
                    
                    currPersona.oid = r.getInt("oid");
                    currPersona.nombres = r.getString("nombres");
                    currPersona.cedula = r.getString("cedula");
                    currPersona.observaciones = r.getString("observaciones");
                    currPersona.pagado = r.getBoolean("pagado");
                    currPersona.tipo = r.getInt("tipo");
                    currPersona.nombres = r.getString("nombres");
                    currPersona.apellidos = r.getString("apellidos");
                    currPersona.telefono = r.getString("telefono");
                    currPersona.codigo = r.getString("codigo");
                    currPersona.email = r.getString("email");
                            
                    
                    /*PerfilInscrito currPersona = new PerfilInscrito(
                        r.getString( "cedula" ) ,
                        r.getString( "nombre" ) ,
                        r.getString( "direccion" ) ,
                        r.getString( "telefono" )                     
                    );*/

                    personas.add( currPersona );
                }            
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
        
        db.closeConnection();
        return personas;
    }    
}
